本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。


マイクロソフト西暦 2000 年対応情報開示リソース センター ホーム

よく寄せられる質問

製品ガイド
(日本語)


西暦 2000 年問題に対するマイクロソフトの考え方

技術文書(ホワイト ペーパー)

そのほかの情報
マイクロソフト西暦 2000 年対応情報開示リソース センター


Visual C++ C Run-time library (msvcrt40.dll) 4.0, 4.1

 

開発製品:

Visual C++ C Run-time library (msvcrt40.dll)

バージョン: 4.0, 4.1

デザイン時: 対応

このツールを使って 「マイクロソフト西暦 2000 年対応」 に準拠するアプリケーションを構築できますか

はい

言語:

English, 日本語

対応期間:

1980 年 1 月 1 日 から 2038 年 1 月 18 日

発売日:

1996 年 1 月

必要なソフトウェア: なし

依存する製品: Windows NT 4.0 Service Pack 4 または Windows 98

依存するクロック: システムクロック

カテゴリ: 開発製品

このツールを使って 「マイクロソフト西暦 2000 年対応」 に準拠するアプリケーションを構築できますか?

はい

日付の処理

Visual C++ C ランタイム ライブラリには、日付および時刻計算のための関数が複数あります。これらの関数は、1970 年 1 月 1 日から 2038 年 1 月 18 日まで有効です。これらの関数では、日付および時刻計算でタイム ゾーンと夏時間を考慮することができます。詳しくは、Visual C++ のマニュアルを参照してください。

下 2 桁の西暦の処理

西暦は 1900 年を基準として、1900 からの経過年で表示されます。

Microsoft C ランタイムには、時刻の格納のための 2 つの ANSI-C データ構造があります。

  1. struct tm
  2. time_t

ANSI 型: struct tm と time_t

ANSI C 規格では、これらの型、その意味、およびある範囲においてその元となる型を規定しています。Visual C++ では、time_t 型は long であり、この型の変数を利用する ANSI C 関数と共に使用された場合には 1970 年 1 月 1 日からの秒数を表わします。struct tm 型は、日付を構成する各部分を格納するために使用されます。struct tm は、内部変数を使用して、1900 年以降の年数として西暦を保存します。また、現在夏時間が適用されているかどうかだけでなく、月、曜日、月初めからの日数、年初からの日数、時間、分、および秒もこの構造に格納します。これらのメンバーは、int 型です。これらは、時刻の操作、入出力を行うために ANSI 関数が使用する型です。詳しくは、Visual C++ のマニュアルを参照してください。

ANSI 時刻関数での問題の回避

ANSI 関数をそのまま使用すると、アプリケーションで西暦 2000 年問題を起こす可 能性があります。簡単なガイドラインを守ることで、プログラムがあいまいな日付を 出力することを回避して、西暦 2000 年対応のアプリケーションを作成することがで きます。注意を要するのは、strftimewcsftime です。

  1. アプリケーションのユーザーに対して日付を表示するときは、4 桁の西暦を使用します。strftime 関数と wcsftime 関数を使用するときは、下 2 桁の西暦を表示する %y (小文字) ではなく、%Y を使用して 4 桁の西暦を表示します。次の例を参照してください。
  2. #include <time.h>

    #include <stdio.h>

    const int BUFSIZE = 256;

    char buf[BUFSIZE];

    int main()

    {

    struct tm now;

    time_t tmp = time(0); // get current time

    now = *localtime(&tmp); // get components

    // 2-digit vs. 4-digit year

    char fmt[] = " %m/%d/%y \n %m/%d/%Y ";

    strftime( buf, BUFSIZ, fmt, &now );

    printf(buf);

    return 0;

    }

  3. アプリケーションのユーザーは、アプリケーションで日付を入力するときに 4 桁の西暦を使用して日付を指定する必要があります。
  4. %x または %c 形式は使用しないでください。この形式が使用されている場合に、strftime 関数と wcsftime 関数を使用するときは、長い形式の日付の取得に # を使用してください。 %x および %c 形式のコードは、デフォルトで下 2 桁の西暦を出力するように設定されています。上記プログラムの fmt の初期化を " %x \n %#x " に変更し、その違いを見てください。
  5. 時刻の情報は time_t 変数または struct tm に格納し、操作してください。ANSI C には、このタスクで役立つそのほかの時刻関数があります。以下は、これらの関数の一覧と簡単な説明です。詳細については、Visual C++ のマニュアルを参照してください。
  • time : time_t の現在の暦時間を取得します。
  • difftime : 2 つの time_t の差を計算します。
  • gmtime : 調整済みグリニッジ平均時 (UTC) で、time_tstruct tm に変換します。
  • localtime : ローカル時間で、time_tstruct tm に変換します。
  • asctime_wasctime : 渡された struct tm* に対応する文字列を返します。文字列は "DDD MMM dd HH:MM:SS YYYY\n\0" の形式で、常に 26 文字になります。
  • ctime_wctime : time_t を渡して、文字列形式でローカル時間を返します。 asctime( localtime( time_t_val )) と同一です。
  • mktime : struct tm* の値をローカル時間で調整して time_t に格納します。この値は適切な範囲内になるように更新されます。次の例を参照してください。

#include <time.h>

#include <stdio.h>

const int BUFSIZE = 1024;

char buf[BUFSIZE];

int main()

{

struct tm now;

time_t tmp = time(0); // current time

now = *localtime(&tmp);

size_t len = strftime(buf, BUFSIZE, "%#c\n", &now);

now.tm_hour += 48; //jump ahead two days

// should get a bogus hour value

len += strftime(buf+len, BUFSIZE-len, "%#c\n", &now);

mktime(&now); // mktime will correct

strftime(buf+len, BUFSIZE-len, "%#c\n", &now);

printf(buf);

return 0;

}

  1. _strdate 関数と _wstrdate 関数は ANSI 関数ではありませんが、これらの関数は、9 文字の文字のバッファを生成して、そのバッファへのポインタを受け取ります。出力形式は、"YY/MM/DD" になります。strftime 関数または wcsftime 関数を代わりに使用してください。

西暦 2000 年問題に対応するアプリケーションの開発に関する注意点

詳しくは、http://www.microsoft.com/japan/year2k/2kwhitepaper/vcplus1_jp.htm の「Visual C++ と西暦 2000 年」を参照してください。

西暦 2000 年問題に関するよくある開発時のエラー

起こりうる問題として、ユーザーが独自の日付処理ルーチンを作成しているケースが考えられます。詳しくは、http://www.microsoft.com/japan/year2k/2kwhitepaper/vcplus1_jp.htm の「Visual C++ と西暦 2000 年」を参照してください。

ガイドラインと推奨事項

詳しくは、http://www.microsoft.com/japan/year2k/2kwhitepaper/vcplus1_jp.htm の「Visual C++ と西暦 2000 年」を参照してください。

その他の日付に関する情報

ランタイム ライブラリの日付関数を利用して米国の夏時間がいつ開始されるかを認識しているアプリケーションの場合、Windows のクロックで表示される正しい時刻よりも現在の時刻が 1 時間遅れているかのように動作する可能性があります。この問題は、2001 年 4 月 1 日~ 2001 年 4 月 8 日までの 1 週間継続しますが、これらのアプリケーションが夏時間に移行した後は、オペレーティング システムの時刻に同期します。この問題が発生するのは、2001 年 4 月の第 1 日曜日が 2001 年 4 月 1 日であるため、内部処理が正しく行われないからです。この問題は、Visual Studio 6 Service Pack 3 では解決されています。

 

製品ガイドに戻る

カテゴリの記号について:
* ユーザーが必要な操作を行うことで対応できる製品。
修正プログラムのロードや文書の参照など、指示された操作を行う必要があります。

# マイクロソフトの対応基準に対して許容範囲の差異がある製品。
製品の主要な機能 (データ保全性など) や安定性 (信頼性など) に影響を与えない程度に限られます。

+ 頒布予定の修正プログラムで対応できる製品。
修正プログラムが公開された時点で、できるだけ早期の対応が必要です。

注意:上記の対応状況分類では、必要な対応操作が行われることを前提としています。


  2000年対応状況の開示

マイクロソフトおよび西暦 2000 年問題に関する情報(本書記載の情報の他、西暦 2000 年テスト、評価、対応情況、対応スケジュール、目標、その他に関する、過去、現在および将来の全ての情報を含みますが、これらに限られません。 以下、これらを総称して「マイクロソフト西暦 2000 年ステートメント」といいます。)の送信または伝達は全て、ここに米国の「西暦 2000 年問題に関する情報および対応開示に関する法律」に定義されているところの「西暦 2000 年対応情報開示」として提供されます。 また、かかる情報は、http://www.microsoft.com/japan/year2k/ のマイクロソフトの西暦 2000 年Webサイト(以下「Y2K Webサイト」といいます。)にて参照可能です。 「マイクロソフト西暦 2000 年ステートメント」は、それぞれ、この使用条件、Y2K Webサイト記載の条件並びに「西暦 2000 年問題に関する情報および対応開示に関する法律」の条項に従い、お客様の西暦 2000 年問題に対応するための技術計画を支援させていただく目的でのみ提供されています。 各「マイクロソフト西暦 2000 年ステートメント」には、入手可能な最新情報が含まれますが、それらは逐次更新されます。 従って、マイクロソフトは、お客様が定期的に、Y2K Webサイトを確認して、「マイクロソフト西暦 2000 年ステートメント」の変更を確認されることをお勧めします。 「マイクロソフト西暦 2000 年ステートメント」は、全て、“現状ベース”で提供されるものであり、いかなる保証も伴うものではありません。 従って、マイクロソフトは、商品性の保証および特定目的への適合性を含めて、明示的にも黙示的にもいかなる保証もいたしません。 さらに、マイクロソフトは、いかなる「マイクロソフト西暦 2000 年ステートメント」の使用またはその使用結果についても、その正確性、真実性、信頼性等、いかなる保証もしくは表明も行いません。 マイクロソフトまたはその権限ある代理人による、口頭もしくは書面による一切の情報もしくはアドバイスは、何らの保証を意味するものでもなく、かつ上記の保証の拒絶の範囲を狭めるものではありません。 マイクロソフトおよびその供給者は、いかなる場合においても、「マイクロソフト西暦 2000 年ステートメント」に関連して生じた、直接損害、間接損害、偶発損害、派生損害、事業利益の逸失、懲罰的損害、または特別損害を含むすべての損害について、たとえかかる損害の発生の可能性を知らされていた場合であっても、一切責任を負いません。 派生損害または偶発損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。 各「マイクロソフト西暦 2000 年ステートメント」に含まれる情報は、Y2K Webサイトで参照可能であり、マイクロソフト西暦 2000 年対応状況(YEAR 2000 COMPLIANCE STATEMENT)、マイクロソフトが、その西暦 2000 年製品ガイドにおいて、製品の分類に使用している対応基準に関する説明(DESCRIPTION OF THE CATEGORIES OF COMPLIANCE)およびテスト基準(THE MICROSOFT YEAR 2000 TEST CRITERIA)等、と併せてお読みいただくことを意図して提供されているものです。

マイクロソフトが、西暦 2000 年問題関連の修正版、西暦 2000 年診断ツールまたは修正サービスの提供において、お客様に提供することのある、すべての「マイクロソフト西暦 2000 年ステートメント」は、米国の「西暦 2000 年問題に関する情報及び対応開示に関する法律(112 STAT.2386)」の適用を条件として提供されるものです。 何らかの争いが生じた場合には、かかるステートメントの使用に関するお客様の権利は、お客様との契約書または料金表において、別段の合意がなされていない限り、この法律により制限されます。


  最終更新日 1999 年 7 月 10 日
  ©1999 Microsoft Corporation. All rights reserved. Terms of Use.
本サイトは西暦 2000 年 対応開示 (Year2000 Readiness Disclosure) に該当するものであり、本サイトに含まれている情報は本サイトに記載されている条件および西暦 2000 年問題に関する情報及び対応開示に関する米国の法律 (Year2000 Informationand Readiness Disclosure Act) に基づき提供されるものです。
inserted by FC2 system